package cn.xerllent.wxtp.service;

import java.io.IOException;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;

import org.springframework.data.domain.Pageable;
import org.springframework.security.core.userdetails.UserDetails;

import cn.xerllent.common.service.BaseService;
import cn.xerllent.security.security.vo.JwtUser;
import cn.xerllent.wxtp.entity.WxDepartment;
import cn.xerllent.wxtp.entity.WxUser;
import me.chanjar.weixin.cp.tp.service.WxCpTpService;


public interface WxUserService extends BaseService<WxUser> {
	
    /**
     * 查询数据分页
     * @param searchtxt 条件
     * @param pageable 分页参数
     * @return Map<String, Object>
     */
    Map<String, Object> queryAll(WxUser filter, Pageable pageable);

    /**
     * 查询所有数据不分页
     * @param searchtxt 条件参数
     * @return List<WxUserDto>
     */
    List<WxUser> queryAll(WxUser filter);

    /**
     * 导出数据
     * @param all 待导出的数据
     * @param response /
     * @throws IOException /
     */
    void download(List<WxUser> all, HttpServletResponse response) throws IOException;

	/**
	 * 清除对应Mapper的二级缓存，采用无害删除空数据模拟清空,因为二级缓存更新机制是本表数据更新即可清空<br>
	 * 提供本方法供联表更新查询的实时更新
	 * */
	void clearCache();

	/**
	 * 根据wxUser生成jwtUser
	 * */
	JwtUser createJwtUser(WxUser wxUser);

	/**
	 * 自定义jwt:detail规范：username=corpId+"$"+userId,计算而成
	 * 根据corpId及WxUser.userId获取
	 * */
	UserDetails loadUserByUsername(String username);

	/**
	 * 同步指定企业部门用户到本地数据库
	 * @param wxCpTpService 应用api服务
	 * @param depart 企业部门对象
	 */
	void syncDepartmentUsers(WxCpTpService wxCpTpService, WxDepartment depart);
}
